// vim:ft=javascript

ARG_WITH("gd", "Bundled GD support", "yes");

if (PHP_GD != "no") {
    // check for gd.h (required)
    if (!CHECK_HEADER_ADD_INCLUDE("gd.h", "CFLAGS_GD", PHP_GD + ";ext\\gd\\libgd")) {
        ERROR("gd not enabled; libraries and headers not found");
    }

    // zlib ext support (required)
    if (!CHECK_LIB("zlib_a.lib;zlib.lib", "gd", PHP_GD)) {
        ERROR("gd not enabled; zlib not enabled");
    }

    // libjpeg lib support
    if (CHECK_LIB("libjpeg_a.lib;libjpeg.lib", "gd", PHP_GD) &&
        CHECK_HEADER_ADD_INCLUDE("jpeglib.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include")) {
        AC_DEFINE("HAVE_LIBJPEG", 1, "JPEG support");
        AC_DEFINE("HAVE_GD_JPG", 1, "JPEG support");
    }

    // libpng16 lib support
    if (CHECK_LIB("libpng_a.lib;libpng.lib", "gd", PHP_GD) &&
        CHECK_HEADER_ADD_INCLUDE("png.h", "CFLAGS_GD", PHP_GD +  ";" + PHP_PHP_BUILD + "\\include\\libpng16")) {
        AC_DEFINE("HAVE_LIBPNG", 1, "PNG support");
        AC_DEFINE("HAVE_GD_PNG", 1, "PNG support");
    }

    // freetype lib support
    if (CHECK_LIB("libfreetype_a.lib;libfreetype.lib", "gd", PHP_GD) &&
        CHECK_HEADER_ADD_INCLUDE("ft2build.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\freetype2;" + PHP_PHP_BUILD + "\\include\\freetype")) {
        AC_DEFINE("HAVE_LIBFREETYPE", 1, "FreeType support");
        AC_DEFINE("HAVE_GD_FREETYPE", 1, "FreeType support");
    }

    // xpm lib support
    if (CHECK_LIB("libXpm_a.lib", "gd", PHP_GD) &&
        CHECK_HEADER_ADD_INCLUDE("xpm.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\X11")) {
        AC_DEFINE("HAVE_LIBXPM", 1, "XPM support");
        AC_DEFINE("HAVE_GD_XPM", 1, "XPM support");
    }

    // iconv lib support
    if ((CHECK_LIB("libiconv_a.lib;libiconv.lib", "gd", PHP_GD) || CHECK_LIB("iconv_a.lib;iconv.lib", "gd", PHP_GD)) &&
        CHECK_HEADER_ADD_INCLUDE("iconv.h", "CFLAGS_GD", PHP_GD)) {
        AC_DEFINE("HAVE_LIBICONV", 1, "Iconv support");
    }

    // libwebp lib support
    if ((CHECK_LIB("libwebp_a.lib", "gd", PHP_GD) || CHECK_LIB("libwebp.lib", "gd", PHP_GD)) &&
        CHECK_LIB("libsharpyuv.lib", "gd", PHP_GD) &&
        CHECK_HEADER_ADD_INCLUDE("decode.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\webp") &&
        CHECK_HEADER_ADD_INCLUDE("encode.h", "CFLAGS_GD", PHP_GD + ";" + PHP_PHP_BUILD + "\\include\\webp")) {
        AC_DEFINE("HAVE_LIBWEBP", 1, "WebP support");
        AC_DEFINE("HAVE_GD_WEBP", 1, "WebP support");
    }

    // libavif lib is not supported on php <= 8.0

    CHECK_LIB("User32.lib", "gd", PHP_GD);
    CHECK_LIB("Gdi32.lib", "gd", PHP_GD);

    EXTENSION("gd", "gd.c", null, "-Iext/gd/libgd");
    ADD_SOURCES("ext/gd/libgd", "gd.c \
        gdcache.c gdfontg.c gdfontl.c gdfontmb.c gdfonts.c gdfontt.c \
        gdft.c gd_gd2.c gd_gd.c gd_gif_in.c gd_gif_out.c gdhelpers.c gd_io.c gd_io_dp.c \
        gd_io_file.c gd_io_ss.c gd_jpeg.c gdkanji.c gd_png.c gd_ss.c \
        gdtables.c gd_topal.c gd_wbmp.c gdxpm.c wbmp.c gd_xbm.c gd_security.c gd_transform.c \
        gd_filter.c gd_pixelate.c gd_rotate.c gd_color_match.c gd_webp.c \
        gd_crop.c gd_interpolation.c gd_matrix.c gd_bmp.c gd_tga.c", "gd");

    AC_DEFINE('HAVE_LIBGD', 1, 'GD support');
    AC_DEFINE('HAVE_GD_BUNDLED', 1, "Bundled GD");
    AC_DEFINE('HAVE_GD_BMP', 1, "BMP support");
    AC_DEFINE('HAVE_GD_TGA', 1, "TGA support");
    ADD_FLAG("CFLAGS_GD", " \
/D PHP_GD_EXPORTS=1 \
/D HAVE_GD_GET_INTERPOLATION \
    ");
    if (ICC_TOOLSET) {
        ADD_FLAG("LDFLAGS_GD", "/nodefaultlib:libcmt");
    }

    PHP_INSTALL_HEADERS("", "ext/gd ext/gd/libgd");
}
